from PIL import Image,ImageDraw,ImageFont,ImageFilter
# 创建图片
# img=Image.new(mode='RGB',size=(120,30),color=(255,255,255))
# # 创建画笔
# draw=ImageDraw.Draw(img,mode='RGB')
# font=ImageFont.truetype('./app01/static/font/刻石录明体.ttf',28)
# draw.text([0,0],'伞华','red',font)
# with open('code.png','wb')as f:
#     img.save(f,format='png')
import random

def check_code(width=120,height=30,char_length=4,font_file='./app01/static/font/刻石录明体.ttf',font_size=28):
    code=[]
    img=Image.new(mode='RGB',size=(width,height),color=(255,255,255))
    draw=ImageDraw.Draw(img,mode='RGB')

    def rndChar():
        """
        生成随机字母
        :return:
        """
        return chr(random.choice([random.randint(65, 90), random.randint(97, 122)]))
    def rndColor():
        '''
        生成随机颜色
        :return:
        '''
        return (random.randint(0,255),random.randint(0,255),random.randint(0,255))
    font=ImageFont.truetype(font_file,font_size)
    #x写文字
    for i in range(char_length):
        char=rndChar()
        code.append(char)
        h=random.randint(0,4)
        draw.text([i*width/char_length,h], char, 'red', font)
        print(char)

    for i in range(40):
        draw.point([random.randint(0,width),random.randint(0,height)],fill=rndColor())
    #干扰圈
    for i in range(40):
        draw.point([random.randint(0,width),random.randint(0,height)],fill=rndColor())
        x=random.randint(0,width)
        y=random.randint(0,height)
        # draw.arc((x,y,x+4,y+4),0,90,color=rndColor())
        draw.arc((x,y,x+4,y+4),0,90)
    #干扰线
    for i in range(5):
        x1=random.randint(0,width)
        y1=random.randint(0,height)
        x2=random.randint(0,width)
        y2=random.randint(0,height)

        draw.line((x1,y1,x2,y2),fill=rndColor())

    img=img.filter(ImageFilter.EDGE_ENHANCE_MORE)
    return img, ''.join(code)

if __name__=='__main__':
    img,code_str=check_code()
    # check_code()
    print('-----')
    print(code_str)
    with open('code.png','wb')as f:
        img.save(f,format='png')
